分布式版本管理系统
优点
- 能将代码库完整地复制到本地
 - 运行速度快
 - 临时作业的提交易于管理
 - 分支、合并简单方便
 - 可以不受地点的限制进行协作开发
 
缺点
- 系统中没有真正意义上的最新版本
 - 没有真正意义上的版本号
 - 工作流程的配置过于灵活,易于产生混乱
 - 思维方式的习惯需要一定的时间
 
Git概念
- 配置文件(优先级依次降低)
- .git/config 为特定版本库的配置文件
 - ~/.gitconfig 为当前用户的配置文件 
--global - /etc/gitconfig 为当前系统的配置文件 
--system 
 - 版本库
- 裸版本库,没有工作目录,没有检出分支,不能用于正常开发
 - 开发版本库,最常用的
 - 工作中使用的是本地版本库或者当前版本库,共享和交换文件的版本库为远程版本库
 
 - 分支
- 远程追踪分支与版本库关联,追踪远程分支中的变化
refs/remotes - 本地追踪分支和远程追踪分支对应,用于收集本地开发和远程追踪分支的变更
 
 - 远程追踪分支与版本库关联,追踪远程分支中的变化
 - 文件分类
- tracked(已追踪的)
 - ignored(被忽略的)
 - untracked(未追踪的)
 
 - 对象类型(commit可以打tag,commit包含tree,tree包含至少一个blob)
- blob
 - tree
 - commit
 - tag
 
 - 索引(index)
 - 提交(commit)
- 相对提交
- 除了跟提交外,其他每一个提交都有至少一个父提交
 - 使用
^x来选择第x个父提交(多个父提交来源于merge),单独的^表示父级提交 - 使用
~来选择上一代提交,~n表示向上n代提交,单独的~表示父级提交 - 使用
@来表示,相对的版本,比如HEAD@{10} 
 - 提交范围
..表示一个范围,start..end表示start可达的但end不可达的内容(结合差),start和end分别为能表示提交的标识,比如commitid或者 相对提交等,范围的结果是前开后闭的区间,不包括start但包括end;也可以省略start或者end,省略的一方默认HEAD...同样表示一个范围,start...end表示start和end不同时可达的内容
 
 - 相对提交
 - 引用(reference)
.git/refs/- 本地分支名 
.git/refs/heads/ - 远程跟踪分支名 
.git/refs/remotes - 标签名 
.git/refs/tags - HEAD 当前分支的最新提交
 - ORIG_HEAD 类似
merge、reset这样的操作留下的操作前HEAD的保存 - FETCH_HEAD 
fetch操作是获取的所有分支HEAD的列表 - MERGE_HEAD 
merge操作时要写到HEAD里面的内容 - MERGE_MSG 记录合并失败的信息
 - MEGE_MODE 合并标识状态
 
 - 本地分支名 
 
Git 操作
- 获得帮助
- 输入
git并回车,看到git相关帮助和提示 - 输入
git help xxx来查看子命令相关的帮助 
 - 输入
 - 初始化仓库
git init- 会在当前目录下创建一个
.git的目录,包含了相关的版本库相关的信息 
 - 会在当前目录下创建一个
 - 版本库克隆 
git clone- clone过程原始版本库中的
refs/heads下的本地分支,会成为新的克隆版本库refs/remotes下的远程跟踪分支,原始版本库中的refs/remotes下的远程分支不会克隆 refs/tags会被克隆,hooks、配置文件、reflog、stash 不会被克隆
 - clone过程原始版本库中的
 - 添加跟踪 
git add - 删除跟踪 
git rm - 带跟踪的移动或者改名 
git mv - 切换分支、拉取文件 
git checkoutgit checkout branch -- path/to/file拉取branch中的文件
 - 日志查看 
git log - 比较差异 
git diff - 单行最后一次变更查看 
git blame - 提交内容 
git commitgit commit --amend修改最后一次提交
 - 二分查找 
git bisect - 分支管理 
git branch - 更详细的分支信息
git show-branch- 展示的是二位矩阵,破折号上面表示分支的信息,破折号下面表示提交的信息
 +表示当前行的提交存在于当前列的分支中*表示存在于活动分支中的提交-表示当前提交为一个合并提交
 - 分支合并 
git merge- 冲突文件状态 
git status --merge或者git ls-files -u 
 - 冲突文件状态 
 - 重置状态 
git reset--soft,index和working copy保持不变,只改变HEAD--mixedworking copy保持不变,HEAD和index改变--hardworking copy,index,HEAD都会改变
 - 引入提交的变更 
git cherry-pickgit cherry-pick commitid在当前分支引入commitid的变更git cherry-pick start..end新版的git中,支持引入一个范围的变更
 - 以新的提交抵消特定提交 
git revertgit rebase branch让当前分支基于最新的 branchgit rebase base target使target分支基于base分支的最新提交
 - 临时保持状态  
git stash - 引用日志 
git reflog - 获取引用信息 
git rev-parse - 远程版本信息管理 
git remote - 抓取远程信息 
git fetch - 抓取远程信息并合并 
git pull - 推送本地信息到远程 
git push - 修改版本库信息 
git filter-branch git rev-parsegit rev-list
参考资料
最后更新: 2022年03月02日 03:32
原始链接: http://rawbin-.github.io/dev-tools/git/2017-11-10-git-concept/